package com.cmo.rzl.calling;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.beetl.sql.core.kit.StringKit;

import com.cmo.rzl.core.base.BaseController;
import com.cmo.rzl.core.jfinal.ext.autoroute.ControllerBind;
import com.cmo.rzl.core.toolbox.Record;
import com.cmo.rzl.core.toolbox.kit.ShardKit;
import com.cmo.rzl.shine.model.Doctor;
import com.cmo.rzl.shine.model.Pager;
import com.cmo.rzl.shine.service.Doctor2queuetypeService;
import com.cmo.rzl.shine.service.DoctorService;
import com.cmo.rzl.shine.service.Pager2queuetypeService;
import com.cmo.rzl.shine.service.PagerService;
import com.cmo.rzl.shine.service.TriageService;
import com.cmo.rzl.shine.service.impl.Doctor2queuetypeServiceImpl;
import com.cmo.rzl.shine.service.impl.DoctorServiceImpl;
import com.cmo.rzl.shine.service.impl.Pager2queuetypeServiceImpl;
import com.cmo.rzl.shine.service.impl.PagerServiceImpl;
import com.cmo.rzl.shine.service.impl.TriageServiceImpl;

@ControllerBind(controllerKey="/call_login")
public class CallingLoginController extends BaseController {

	DoctorService servicedoctor=new DoctorServiceImpl();
	ShardKit shared=new ShardKit();
	PagerService servicepager=new PagerServiceImpl();
	Doctor2queuetypeService rdq=new Doctor2queuetypeServiceImpl();
	Pager2queuetypeService rpq=new Pager2queuetypeServiceImpl();
	TriageService triage=new TriageServiceImpl();
	
	//叫号器登陆
		public void call_login(){
			Map<String, Object> map=new HashMap<String, Object>();
			//获取登录工号
			String login_id=getPara("login_id");
			if(StringKit.isBlank(login_id)){
				map.put("return_code", "fail");
				map.put("return_msg", "请输入您的工号进行登陆");
				renderJson(map);
				return;
			}
			//根据医生登陆工号查询医生是否存在
			Doctor recordloginid= servicedoctor.findByLogin_id(login_id);
			if(null==recordloginid){
				map.put("return_code", "fail");
				map.put("return_msg", "当前医生工号错误,请输入正确的医生工号");
				renderJson(map);
				return;
			}
			//获取客户端ip
			String ip=shared.getIpAddr(getRequest());
			//根据客户端ip查询是否有配置
			Pager recordip= servicepager.findByIP(ip);
			if(null==recordip){
				map.put("return_code", "fail");
				map.put("return_msg", "当前电脑没有配置为叫号器");
				renderJson(map);
				return;
			}
			
			//分诊台分诊模式 triage_type 1按医生 2按叫号器
			//根据叫号器 客户端ip查询分诊台ip
			Record rt= triage.findbypagerip(ip);
			if(null==rt){
				map.put("return_code", "fail");
				map.put("return_msg", "当前电脑没有配置叫号器设置");
				renderJson(map);
				return;
			}
			//获取分诊台分针模式
			String type=rt.getStr("triage_type");
			
			//按医生模式
			if("1".equals(type)){
				//查询医生模式的排班
				Record qdp= rdq.querydoctorpaiban(login_id);
				if(null==qdp){
					map.put("return_code", "fail");
					map.put("return_msg", "当前医生没有排班信息，请联系分诊台护士");
					renderJson(map);
					return;
				}else{
					//将医生doctor_id 添加到叫号器中
					servicepager.updatepagerinsert(login_id, ip);
					//清空不是本机叫号器的医生id
					servicepager.updatedoctorid(ip, login_id);
					//登陆
					Record record= servicepager.call_login(login_id);
					if(null==record){
						map.put("return_code", "fail");
						map.put("return_msg", "登陆失败,请确认登陆工号是否正确");
						renderJson(map);
						return;
					}else{
						List<Record> list= servicedoctor.call_doctor_queueType_name(login_id,ip,type);
						if(null==list){
							map.put("return_code", "fail");
							map.put("return_msg", "该医生没有分配队列");
							renderJson(map);
							return;
						}else{
							map.put("return_code", "success");
							map.put("return_msg", "操作成功");
							map.put("list", list);
							map.put("queue_type_id", list.get(0).get("queue_type_id"));
							//将医生工号存入session中
							setSessionAttr("login_id", login_id);
							renderJson(map);
						}
					}
				}
			}else if("2".equals(type)){
				//将医生doctor_id 添加到叫号器中
				int bool= servicepager.updatepagerinsert(login_id, ip);
				if(bool>0){
					//按叫号器模式查询排班信息
					Record qpp= rpq.querypagerpaiban(login_id);
					if(null==qpp){
						Pager pag= servicepager.findFirstBy("ip=#{ip}", Record.create().set("ip", ip));
						if(null!=pag.getDoctor_id()){
							//将当前医生的doctor_id从叫号器中移除
							boolean boole=servicepager.updatepagerdelete(ip);
							if(boole){
								map.put("return_code", "fail");
								map.put("return_msg", "当前叫号器没有排班信息，请联系分诊台护士");
								renderJson(map);
								return;
							}
						}
					}else{
						//登陆
						Record record= servicepager.call_login(login_id);
						if(null==record){
							map.put("return_code", "fail");
							map.put("return_msg", "登陆失败,请确认登陆工号是否正确");
							renderJson(map);
							return;
						}else{
							List<Record> list= servicedoctor.call_doctor_queueType_name(login_id,ip,type);
							if(null==list){
								map.put("return_code", "fail");
								map.put("return_msg", "该医生没有分配队列");
								renderJson(map);
								return;
							}else{
								map.put("return_code", "success");
								map.put("return_msg", "操作成功");
								map.put("list", list);
								//将队列id存入session
								setSessionAttr("queue_type_id", list.get(0).get("queue_type_id"));
								//将医生工号存入session中
								setSessionAttr("login_id", login_id);
								renderJson(map);
							}
						}
					}
				}
			}else{
				  map.put("return_code", "fail");
			      map.put("return_msg", "系统错误，请联系管理员");
			      renderJson(map);
			      return;
			}
			renderJson(map);
		}
}
